데이터 타입 변환 함수와 연산자¶
CAST¶
-
CAST
(cast_operand AS cast_target)¶ CAST 연산자를 SELECT 문에서 어떤 값의 데이터 타입을 다른 데이터 타입으로 명시적으로 변환하는 데 사용할 수 있다. 조회 리스트 또는 WHERE 절의 값 수식을 다른 데이터 타입으로 변환할 수 있다.
Parameters: - cast_operand -- 다른 타입으로 변환할 값을 선언한다.
- cast_target -- 변환할 타입을 지정한다.
Return type: cast_target
경우에 따라 CAST 연산자를 쓰지 않고 데이터 타입이 자동으로 변환될 수 있다. 이에 대한 자세한 내용은 묵시적 타입 변환을 참고한다.
문자열을 날짜/시간 타입으로 변환하는 것에 대한 자세한 내용은 문자열을 날짜/시간 타입으로 CAST 을 참고한다.
CUBRID에서 CAST 연산자를 사용한 명시적인 타입 변환에 대해서 정리하면 다음의 표와 같다.
From \ To | EN | AN | VC | FC | VB | FB | ENUM | BLOB | CLOB | D | T | UT | DT | S | MS | SQ |
EN | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No |
AN | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No |
VC | Yes | Yes | Yes(*) | Yes(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No |
FC | Yes | Yes | Yes(*) | Yes(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No |
VB | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | No |
FB | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | No |
ENUM | No | No | Yes | Yes | No | No | Yes | No | No | No | No | No | No | No | No | No |
BLOB | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No |
CLOB | No | No | Yes | Yes | No | No | Yes | No | Yes | No | No | No | No | No | No | No |
D | No | No | Yes | Yes | No | No | No | No | No | Yes | No | Yes | Yes | No | No | No |
T | No | No | Yes | Yes | No | No | No | No | No | No | Yes | No | No | No | No | No |
UT | No | No | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No |
DT | No | No | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No |
S | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes |
MS | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes |
SQ | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes |
(*): 이 경우에 CAST 연산은 값 수식과 변환할 데이터 타입이 같은 문자셋을 가질 경우에만 허용된다.
- 데이터 타입 키
- EN: 정확한 수치(INTEGER, SMALLINT, BIGINT, NUMERIC, DECIMAL)
- AN: 근사값 수치(FLOAT/REAL, DOUBLE)
- VC: 가변 길이 문자열(VARCHAR (n))
- FC: 고정 길이 문자열(CHAR (n))
- VB: 가변 길이 비트열(BIT VARYING (n))
- FB: 고정 길이 비트열(BIT (n))
- ENUM: ENUM 타입
- BLOB: DB 외부에 저장하는 바이너리 데이터(BLOB)
- CLOB: DB 외부에 저장하는 문자열 데이터(CLOB)
- D: DATE
- T: TIME
- DT: DATETIME
- UT: TIMESTAMP
- S: SET
- MS: MULTISET
- SQ: LIST (= SEQUENCE)
--operation after casting character as INT type returns 2
SELECT (1+CAST ('1' AS INT));
(1+ cast('1' as integer))
===========================
2
--cannot cast the string which is out of range as SMALLINT
SELECT (1+CAST('1234567890' AS SMALLINT));
ERROR: Cannot coerce value of domain "character" to domain "smallint".
--operation after casting returns 1+1234567890
SELECT (1+CAST('1234567890' AS INT));
(1+ cast('1234567890' as integer))
====================================
1234567891
--'1234.567890' is casted to 1235 after rounding up
SELECT (1+CAST('1234.567890' AS INT));
(1+ cast('1234.567890' as integer))
====================================
1236
--'1234.567890' is casted to string containing only first 5 letters.
SELECT (CAST('1234.567890' AS CHAR(5)));
( cast('1234.567890' as char(5)))
====================================
'1234.'
--numeric type can be casted to CHAR type only when enough length is specified
SELECT (CAST(1234.567890 AS CHAR(5)));
ERROR: Cannot coerce value of domain "numeric" to domain "character".
--numeric type can be casted to CHAR type only when enough length is specified
SELECT (CAST(1234.567890 AS CHAR(11)));
( cast(1234.567890 as char(11)))
====================================
'1234.567890'
--numeric type can be casted to CHAR type only when enough length is specified
SELECT (CAST(1234.567890 AS VARCHAR));
( cast(1234.567890 as varchar))
====================================
'1234.567890'
--string can be casted to time/date types only when its literal is correctly specified
SELECT (CAST('2008-12-25 10:30:20' AS TIMESTAMP));
( cast('2008-12-25 10:30:20' as timestamp))
=============================================
10:30:20 AM 12/25/2008
SELECT (CAST('10:30:20' AS TIME));
( cast('10:30:20' as time))
==================================================
10:30:20 AM
--string can be casted to TIME type when its literal is same as TIME's.
SELECT (CAST('2008-12-25 10:30:20' AS TIME));
( cast('2008-12-25 10:30:20' as time))
========================================
10:30:20 AM
--string can be casted to TIME type after specifying its type of the string
SELECT (CAST(TIMESTAMP'2008-12-25 10:30:20' AS TIME));
( cast(timestamp '2008-12-25 10:30:20' as time))
==================================================
10:30:20 AM
SELECT CAST('abcde' AS BLOB);
cast('abcde' as blob)
======================
file:/home1/user1/db/tdb/lob/ces_743/ces_temp.00001283232024309172_1342
SELECT CAST(B'11010000' as varchar(10));
cast(B'11010000' as varchar(10))
====================================
'd0'
SELECT CAST('1A' AS BLOB);
cast('1A' as bit(16))
=================================
X'1a00'
Note
- CAST 변환은 같은 문자셋을 가지는 데이터 타입끼리만 허용된다.
- 근사치 데이터 타입(FLOAT, DOUBLE)이 정수형으로 변환되는 경우, 소수점 아래 자리가 반올림 처리된다.
- 정확한 수치 데이터 타입(NUMERIC)이 정수형으로 변환되는 경우, 소수점 아래 자리가 반올림 처리된다.
- 수치 데이터 타입을 문자열 타입으로 변환하는 경우, 문자열의 길이가 (모든 유효 숫자 자리 + 소수점) 이상이 되도록 충분하게 지정해야 한다. 그렇지 않으면 에러가 발생한다.
- 문자열 타입 A를 문자열 타입 B로 변환하는 경우, A의 길이 이상이 되도록 충분하게 지정되지 않으면 문자열 끝 부분이 삭제(truncate)되어 저장된다.
- 문자열 타입 A를 날짜/시간 데이터 타입 B로 변환하는 경우, A의 리터럴이 B 타입과 일치하는 경우에만 변환된다. 그렇지 않을 경우 에러가 발생한다.
- 문자열로 저장된 수치 데이터는 명시적으로 타입 변환을 해주어야 산술 연산이 가능하다.
DATE_FORMAT¶
-
DATE_FORMAT
(date, format)¶ DATE_FORMAT 함수는 DATE 형식('YYYY-MM-DD' 또는 'MM/DD/YYYY')를 포함하는 문자열 또는 날짜/시간 타입(DATE, TIMESTAMP, DATETIME) 값을 지정된 날짜/시간 형식으로 변환하여 문자열로 출력하며, 리턴 값은 VARCHAR 타입이다. 지정할 format 인자는 아래의 날짜/시간 형식 2 표를 참고한다. 날짜/시간 형식 2 표는
DATE_FORMAT()
함수,TIME_FORMAT()
함수,STR_TO_DATE()
함수에서 사용된다.Parameters: - date -- DATE 형식('YYYY-MM-DD' 또는 'MM/DD/YYYY')를 포함하는 문자열 또는 날짜/시간 타입(DATE, TIMESTAMP, DATETIME) 값이 지정될 수 있다.
- format -- 출력 형식을 지정한다. '%'로 시작하는 형식 지정자(specifier)를 사용한다.
Return type: STRING
format 인자가 지정되면 지정된 언어에 맞는 형식으로 날짜를 출력한다. 이때 언어는 intl_date_lang 시스템 파라미터에 지정한 언어가 적용된다. intl_date_lang이 지정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 format 이 "%d %M %Y"인 경우 "2009년 10월 3일"인 날짜를 "3 Oktober 2009"인 문자열로 출력한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
아래 날짜/시간 형식 2 표에서 월 이름, 요일 이름, 일 이름, 오전/오후 이름 등은 언어에 따라 다르다.
날짜/시간 형식 2
format 값 | 의미 |
---|---|
%a | Weekday, 영문 약어 (Sun, ..., Sat) |
%b | Month, 영문 약어 (Jan, ..., Dec) |
%c | Month(1, ..., 12) |
%D | Day of the month, 서수 영문 문자열(1st, 2nd, 3rd, ...) |
%d | Day of the month, 두 자리 숫자(01, ..., 31) |
%e | Day of the month (1, ..., 31) |
%f | Milliseconds, 세 자리 숫자 (000, ..., 999) |
%H | Hour, 24시간 기준, 두 자리 수 이상 (00, ..., 23, ..., 100, ...) |
%h | Hour, 12시간 기준 두 자리 숫자 (01, ..., 12) |
%I | Hour, 12시간 기준 두 자리 숫자 (01, ..., 12) |
%i | Minutes, 두 자리 숫자 (00, ..., 59) |
%j | Day of year, 세 자리 숫자 (001, ..., 366) |
%k | Hour, 24시간 기준, 한 자리 수 이상 (0, ..., 23, ..., 100, ...) |
%l | Hour, 12시간 기준 (1, ..., 12) |
%M | Month, 영문 문자열 (January, ..., December) |
%m | Month, 두 자리 숫자 (01, ..., 12) |
%p | AM or PM |
%r | Time, 12 시간 기준, 시:분:초 (hh:mi:ss AM or hh:mi:ss PM) |
%S | Seconds, 두 자리 숫자 (00, ..., 59) |
%s | Seconds, 두 자리 숫자 (00, ..., 59) |
%T | Time, 24시간 기준, 시:분:초 (hh:mi:ss) |
%U | Week, 두 자리 숫자, 일요일이 첫날인 주 단위 (00, ..., 53) |
%u | Week, 두 자리 숫자, 월요일이 첫날인 주 단위 (00, ..., 53) |
%V | Week, 두 자리 숫자, 일요일이 첫날인 주 단위 (01, ..., 53) %X와 결합되어 사용 가능 |
%v | Week, 두 자리 숫자, 월요일이 첫날인 주 단위 (01, ..., 53) %x 와 결합되어 사용 가능 |
%W | Weekday, 영문 문자열 (Sunday, ..., Saturday) |
%w | Day of the week, 숫자 인덱스 (0=Sunday, ..., 6=Saturday) |
%X | Year, 네 자리 숫자, 일요일이 첫날인 주 단위로 계산(0000, ..., 9999) %V와 결합되어 사용 가능 |
%x | Year, 네 자리 숫자, 월요일이 첫날인 주 단위로 계산(0000, ..., 9999) %v와 결합되어 사용 가능 |
%Y | Year, 네 자리 숫자 (0001, ..., 9999) |
%y | Year, 두 자리 숫자 (00, 01, ..., 99) |
%% | 특수문자 "%"를 그대로 출력하는 경우 |
%x | 형식 지정자로 쓰이지 않는 영문자 중 임의의 문자 x를 그대로 출력하는 경우 |
다음은 시스템 파라미터 intl_date_lang 의 값이 "en_US"인 경우의 예이다.
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
date_format('2009-10-04 22:23:00', '%W %M %Y')
======================
'Sunday October 2009'
SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
date_format('2007-10-04 22:23:00', '%H:%i:%s')
======================
'22:23:00'
SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j')
======================
'4th 00 Thu 04 10 Oct 277'
SELECT DATE_FORMAT('1999-01-01', '%X %V');
date_format('1999-01-01', '%X %V')
======================
'1998 52'
다음은 시스템 파라미터 intl_date_lang 의 값이 "de_DE"인 경우의 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
date_format('2009-10-04 22:23:00', '%W %M %Y')
======================
'Sonntag Oktober 2009'
SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s %p');
date_format('2007-10-04 22:23:00', '%H:%i:%s %p')
======================
'22:23:00 Nachm.'
SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j')
======================
'4 00 Do. 04 10 Okt 277'
FORMAT¶
-
FORMAT
(x, dec)¶ FORMAT 함수는 숫자 x 의 형식이 #,###,###.##### 이 되도록, 소수점 위 세 자리마다 자릿수 구분 기호로 구분하고 소수점 기호 아래 숫자가 dec 만큼 표현되도록 dec 의 아랫자리에서 반올림을 수행한 결과를 VARCHAR 타입으로 반환한다.
Parameters: - x -- 수치 값을 반환하는 임의의 연산식이다.
- dec -- 소수점 이하 자릿수
Return type: STRING
자릿수 구분 기호와 소수점 기호는 지정한 언어에 맞는 형식으로 출력한다. 이때 언어는 intl_number_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_number_lang 값이 지정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"나 "fr_FR"과 같은 유럽 국가의 언어이면 "."를 숫자의 자릿수 구분 기호로 해석하고 ","를 소수점 기호로 해석한다(언어별 숫자의 기본 출력 참고).
다음은 시스템 파라미터 intl_number_lang 의 값을 "en_US"로 설정하여 수행한 예이다.
SET SYSTEM PARAMETERS 'intl_number_lang="en_US"';
SELECT FORMAT(12000.123456,3), FORMAT(12000.123456,0);
format(12000.123456, 3) format(12000.123456, 0)
============================================
'12,000.123' '12,000'
다음은 시스템 파라미터 intl_number_lang 의 값을 "de_DE"로 설정하여 생성한 데이터베이스에서 실행한 예이다. 독일, 프랑스 등 유럽 국가 대부분의 숫자 출력 형식은 "."가 자릿수 구분 기호이고, ","가 소수점 기호이다.
SET SYSTEM PARAMETERS 'intl_number_lang="de_DE"';
SELECT FORMAT(12000.123456,3), FORMAT(12000.123456,0);
format(12000.123456, 3) format(12000.123456, 0)
============================================
'12.000,123' '12.000'
STR_TO_DATE¶
-
STR_TO_DATE
(string, format)¶ STR_TO_DATE 함수는 인자로 주어진 문자열을 지정된 형식에 따라 해석하여 날짜/시간 값으로 변환하며,
DATE_FORMAT()
함수와 반대로 동작한다. 리턴 값은 문자열에 포함된 날짜 또는 시간 부분에 따라 타입이 결정되며, DATETIME, DATE, TIME 타입 중 하나이다.Parameters: - string -- 모든 문자열 타입이 지정될 수 있다.
- format -- 문자열 해석을 위한 형식을 지정한다. %를 포함하는 문자열을 형식 지정자(specifier)로 사용한다.
DATE_FORMAT()
함수의 날짜/시간 형식 2 표를 참고한다.
Return type: DATETIME, DATE, TIME
지정할 format 인자는 DATE_FORMAT()
함수의 날짜/시간 형식 2 표를 참고한다.
string에 유효하지 않은 날짜/시간 값이 포함되거나, format에 지정된 형식 지정자를 적용하여 문자열을 해석할 수 없으면 에러를 리턴한다.
format 인자가 지정되면 지정된 언어에 맞는 형식으로 string 을 해석한다. 이때 언어는 intl_date_lang 시스템 파라미터에 지정한 언어가 적용된다. intl_date_lang 값이 지정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 format 이 "%d %M %Y"인 경우 "3 Oktober 2009"인 문자열을 "2009년 10월 3일"인 DATE 타입으로 해석한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
인자의 연, 월, 일에는 0을 입력할 수 없으나, 예외적으로 날짜와 시간이 모두 0인 값을 입력한 경우에는 날짜와 시간 값이 모두 0인 DATE, DATETIME 타입의 값을 반환한다. 그러나 JDBC 프로그램에서는 연결 URL 속성인 zeroDateTimeBehavior의 설정에 따라 동작이 달라진다. 이에 관한 자세한 내용은 연결 설정을 참고하면 된다.
다음은 시스템 파라미터 intl_date_lang 의 값이 "en_US"인 경우의 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="en_US"';
SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
str_to_date('01,5,2013', '%d,%m,%Y')
=======================================
05/01/2013
SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
str_to_date('May 1, 2013', '%M %d,%Y')
=========================================
05/01/2013
SELECT STR_TO_DATE('13:30:17','%H:%i');
str_to_date('13:30:17', '%H:%i')
========================================
01:30:00 PM
SELECT STR_TO_DATE('09:30:17 PM','%r');
str_to_date('09:30:17 PM', '%r')
=======================================
09:30:17 PM
SELECT STR_TO_DATE('0,0,0000','%d,%m,%Y');
str_to_date('0,0,0000', '%d,%m,%Y')
======================================
00/00/0000
다음은 시스템 파라미터 intl_date_lang 의 값이 "de_DE"인 경우의 예이다. 독일어 Oktober가 10월로 해석된다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT STR_TO_DATE('3 Oktober 2009', '%d %M %Y');
str_to_date('3 Oktober 2009', '%d %M %Y')
============================================
10/03/2009
TIME_FORMAT¶
-
TIME_FORMAT
(time, format)¶ TIME_FORMAT 함수는 TIME 형식(HH:MI:SS)을 포함하는 문자열 또는 TIME을 포함하는 날짜/시간 타입(TIME, TIMESTAMP, DATETIME) 값을 지정된 시간 형식으로 변환하여 문자열로 출력하며, 리턴 값은 VARCHAR 타입이다.
Parameters: - time -- TIME 형식(HH:MI:SS)을 포함하는 문자열, TIME을 포함하는 날짜/시간 타입(TIME, TIMESTAMP, DATETIME) 값을 지정할 수 있다.
- format -- 문자열 해석을 위한 형식을 지정한다. %를 포함하는 문자열을 형식 지정자(specifier)로 사용한다.
DATE_FORMAT()
함수의 날짜/시간 형식 2 표를 참고한다.
Return type: STRING
format 인자가 지정되면 지정된 언어에 맞는 형식으로 날짜를 출력한다. 이때 언어는 intl_date_lang 시스템 파라미터에 지정한 언어가 적용된다. intl_date_lang 값이 지정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 format 이 "%h:%i:%s %p"인 경우 "08:46:53 PM"인 시간을 "08:46:53 Nachm."으로 출력한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
다음은 시스템 파라미터 intl_date_lang 의 값이 "en_US"인 경우의 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="en_US"';
SELECT TIME_FORMAT('22:23:00', '%H %i %s');
time_format('22:23:00', '%H %i %s')
======================
'22 23 00'
SELECT TIME_FORMAT('23:59:00', '%H %h %i %s %f');
time_format('23:59:00', '%H %h %i %s %f')
======================
'23 11 59 00 000'
SELECT SYSTIME, TIME_FORMAT(SYSTIME, '%p');
SYS_TIME time_format( SYS_TIME , '%p')
===================================
08:46:53 PM 'PM'
다음은 시스템 파라미터 intl_date_lang 의 값이 "de_DE"인 경우의 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT SYSTIME, TIME_FORMAT(SYSTIME, '%p');
SYS_TIME time_format( SYS_TIME , '%p')
===================================
08:46:53 PM 'Nachm.'
TO_CHAR(date_time)¶
-
TO_CHAR
(date_time[, format[, date_lang_string_literal]])¶ TO_CHAR (date_time) 함수는 날짜/시간 타입(TIME, DATE, TIMESTAMP, DATETIME) 값을 날짜/시간 형식 1 표에 따라 문자열로 변환하여 이를 반환하며, 리턴 값의 타입은 VARCHAR 이다.
Parameters: - date_time -- 날짜/시간 타입의 연산식을 지정한다. 값이 NULL 인 경우에는 NULL 이 반환된다.
- format -- 리턴 값의 형식을 지정한다. 값이 NULL 인 경우에는 NULL 이 반환된다.
- date_lang_string_literal -- 리턴 값에 적용할 언어를 지정한다.
Return type: STRING
format 인자가 지정되면 지정한 언어에 맞는 형식으로 date_time 을 출력한다. 자세한 형식은 날짜/시간 형식 1 표를 참고하면 된다. 언어는 date_lang_string_literal 인자에 의해 정해진다. date_lang_string_literal 인자가 생략되면 intl_date_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_date_lang 값이 지정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 format이 "HH:MI:SS AM"인 경우 "08:46:53 PM"인 시간을 "08:46:53 Nachm."으로 출력한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
format 인자가 생략되면 "en_US"의 기본 출력 형식을 따라 date_time을 문자열로 출력한다(아래 날짜/시간 타입에 대한 언어별 기본 출력 형식 표의 en_US 참고).
Note
CUBRID 9.0 미만 버전에서 사용되었던 CUBRID_DATE_LANG 환경 변수는 더 이상 사용되지 않는다.
날짜/시간 타입에 대한 언어별 기본 출력 형식
언어 | DATE | TIME | TIMESTAMP | DATETIME |
---|---|---|---|---|
en_US | 'MM/DD/YYYY' | 'HH:MI:SS AM' | 'HH:MI:SS AM MM/DD/YYYY' | 'HH:MI:SS.FF AM MM/DD/YYYY' |
de_DE | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' |
es_ES | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' |
fr_FR | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' |
it_IT | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' |
ja_JP | 'YYYY/MM/DD' | 'HH24:MI:SS' | 'HH24:MI:SS YYYY/MM/DD' | 'HH24:MI:SS.FF YYYY/MM/DD' |
km_KH | 'DD/MM/YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD/MM/YYYY' | 'HH24:MI:SS.FF DD/MM/YYYY' |
ko_KR | 'YYYY.MM.DD' | 'HH24:MI:SS' | 'HH24:MI:SS YYYY.MM.DD' | 'HH24:MI:SS.FF YYYY.MM.DD' |
tr_TR | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' |
vi_VN | 'DD/MM/YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD/MM/YYYY' | 'HH24:MI:SS.FF DD/MM/YYYY' |
zh_CN | 'YYYY-MM-DD' | 'HH24:MI:SS' | 'HH24:MI:SS YYYY-MM-DD' | 'HH24:MI:SS.FF YYYY-MM-DD' |
ro_RO | 'DD.MM.YYYY' | 'HH24:MI:SS' | 'HH24:MI:SS DD.MM.YYYY' | 'HH24:MI:SS.FF DD.MM.YYYY' |
날짜/시간 형식 1
format 값 | 의미 |
---|---|
CC | 세기(Century) |
YYYY , YY | 4자리 연도, 2자리 연도 |
Q | 분기(1, 2, 3, 4; 1월~3월 = 1) |
MM | 월(01-12; 1월 = 01) 참고: 분(minute)은 MI이다. |
MONTH | 월 이름 |
MON | 축약된 월 이름 |
DD | 날(1-31) |
DAY | 요일 이름 |
DY | 축약된 요일 이름 |
D 또는 d | 요일(1-7) |
AM 또는 PM | 오전/오후 |
A.M. 또는 P.M. | 마침표가 포함된 오전/오후 |
HH 또는 HH12 | 시(1-12) |
HH24 | 시(0-23) |
MI | 분(0-59) |
SS | 초(0-59) |
FF | 밀리초(0-999) |
- / , . ; : "텍스트" | 구두점과 인용구는 그대로 결과에 표현됨 |
date_lang_string_literal 예
형식 구성 요소 | date_lang_string_literal | |
---|---|---|
'en_US' | 'ko_KR' | |
MONTH | JANUARY | 1월 |
MON | JAN | 1 |
DAY | MONDAY | 월요일 |
DY | MON | 월 |
Month | January | 1월 |
Mon | Jan | 1 |
Day | Monday | 월요일 |
Dy | Mon | 월 |
month | january | 1월 |
mon | jan | 1 |
day | monday | 월요일 |
Dy | mon | 월 |
AM | AM | 오전 |
Am | Am | 오전 |
am | am | 오전 |
A.M. | A.M. | 오전 |
A.m. | A.m. | 오전 |
a.m. | a.m. | 오전 |
PM | PM | 오후 |
Pm | Pm | 오후 |
pm | pm | 오후 |
P.M. | P.M. | 오후 |
P.m. | P.m. | 오후 |
p.m. | p.m. | 오후 |
리턴 값 형식의 자릿수의 예
형식 구성 요소 | en_US 자릿수 | ko_KR 자릿수 |
---|---|---|
MONTH(Month, month) | 9 | 4 |
MON(Mon, mon) | 3 | 2 |
DAY(Day, day) | 9 | 6 |
DY(Dy, dy) | 3 | 2 |
HH12, HH24 | 2 | 2 |
"텍스트" | 텍스트의 길이 | 텍스트의 길이 |
나머지 형식 | 주어진 형식의 길이와 같음 | 주어진 형식의 길이와 같음 |
다음은 언어 및 문자셋을 "en_US.iso88591"로 설정하여 생성한 데이터베이스에서 수행한 예이다.
-- create database testdb en_US.iso88591
--creating a table having date/time type columns
CREATE TABLE datetime_tbl(a TIME, b DATE, c TIMESTAMP, d DATETIME);
INSERT INTO datetime_tbl VALUES(SYSTIME, SYSDATE, SYSTIMESTAMP, SYSDATETIME);
--selecting a VARCHAR type string from the data in the specified format
SELECT TO_CHAR(b, 'DD, DY , MON, YYYY') FROM datetime_tbl;
to_char(b, 'DD, DY , MON, YYYY')
======================
'20, TUE , AUG, 2013'
SELECT TO_CHAR(c, 'HH24:MI, DD, MONTH, YYYY') FROM datetime_tbl;
to_char(c, 'HH24:MI, DD, MONTH, YYYY')
======================
'17:00, 20, AUGUST , 2013'
SELECT TO_CHAR(d, 'HH12:MI:SS:FF pm, YYYY-MM-DD-DAY') FROM datetime_tbl;
to_char(d, 'HH12:MI:SS:FF pm, YYYY-MM-DD-DAY')
======================
'05:00:58:358 pm, 2013-08-20-TUESDAY '
SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy');
to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy')
======================
'Sunday October 2009'
다음은 위에서 생성한 데이터베이스에서 TO_CHAR 함수에 언어 인자를 별도로 부여한 예이다. 문자셋이 ISO-8859-1이면 TO_CHAR 함수의 언어 인자를 "tr_TR"과 "ko_KR"로 설정하는 것은 허용하나, 다른 언어는 허용하지 않는다. TO_CHAR 의 언어 인자로 모든 언어를 사용 가능하게 하려면 데이터베이스 생성 시 문자셋이 UTF8이어야 한다.
SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','ko_KR');
to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy', 'ko_KR')
======================
'Iryoil 10wol 2009'
SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','tr_TR');
to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy', 'tr_TR')
======================
'Pazar Ekim 2009'
Note
언어에 따라 월 이름, 일 이름, 요일 이름, 오전/오후 이름의 해석이 변경되는 함수에서 문자셋이 ISO-8859-1인 경우 "en_US" 외에 변경할 수 있는 언어는 "ko_KR"과 "tr_TR"뿐이다(위의 예 참고). 다만, 문자셋이 UTF-8인 경우 CUBRID가 지원하는 모든 언어 중 하나로 변경할 수 있다. 시스템 파라미터 intl_date_lang을 설정하거나 TO_CHAR 함수의 언어 인자를 지정하여 CUBRID가 지원하는 모든 언어(위 구문의 date_lang_string_literal 참고) 중 하나로 변경할 수 있다. 언어에 따라 날짜/시간 형식의 해석이 변경되는 함수들의 목록은 시스템 파라미터 intl_date_lang의 설명을 참고한다.
-- change date locale as "de_DE" and run the below query. -- This case is failed because database locale, en_US's charset is ISO-8859-1 -- and 'de_DE' only supports UTF-8 charset. SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','de_DE');
ERROR: before ' , 'Day Month yyyy','de_DE'); ' Locales for language 'de_DE' are not available with charset 'iso8859-1'.
다음은 DB 생성 시 로캘을 "en_US.utf8"로 설정하고 생성한 데이터베이스에서 TO_CHAR 함수에 언어 인자를 "de_DE"로 지정하고 실행한 예이다.
SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy','de_DE');
to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy', 'de_DE') ====================== 'Sonntag Oktober 2009'
첫번째 인자가 zerodate이고 두번째 인자에 'Month', 'Day'와 같은 리터럴 형식이 지정되면 TO_CHAR 함수는 NULL을 반환한다.
SELECT TO_CHAR(timestamp '0000-00-00 00:00:00', 'Month Day YYYY');
NULL
TO_CHAR(number)¶
-
TO_CHAR
(number[, format[, number_lang_string_literal]]) TO_CHAR (number) 함수는 수치형 데이터 타입을 숫자 형식에 맞는 문자열로 변환하여 VARCHAR 타입으로 반환한다.
Parameters: - number -- 숫자를 반환하는 수치형 데이터 타입의 연산식을 지정한다. 입력값이 NULL이면 결과로 NULL이 반환된다. 입력값이 문자열 타입이면 해당 문자열을 그대로 반환한다.
- format -- 리턴 값의 형식을 지정한다. 값이 NULL인 경우에는 NULL이 반환된다.
- number_lang_string_literal -- 입력 숫자를 출력할 때 적용할 언어를 지정한다.
Return type: STRING
format 인자가 지정되면 지정한 언어에 맞는 형식으로 number를 출력한다. 이때 언어는 number_lang_string_literal 인자에 의해 정해진다. number_lang_string_literal 인자가 생략되면 intl_number_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_number_lang 값이 설정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"나 "fr_FR"과 같은 유럽 국가의 언어이면 "."를 숫자의 자릿수 구분 기호로 출력하고 ","를 소수점 기호로 출력한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
format 인자가 생략되면 지정된 언어의 기본 출력에 따라 number 를 문자열로 출력한다(언어별 숫자의 기본 출력 표 참고).
숫자 형식
형식 구성 요소 | 예제 | 설명 |
---|---|---|
9 | 9999 | "9"의 개수는 반환될 유효숫자 자릿수를 나타낸다. 숫자 인자에 대해 형식에서 지정된 유효숫자 자릿수가 부족하면, 소수부에 대해서는 반올림 연산을 수행한다. 숫자 인자의 정수부 자릿수보다 유효숫자 자릿수가 부족하면 #을 출력한다. |
0 | 0999 | 형식에서 지정된 유효숫자 자릿수가 충분한 경우, 정수부 앞 부분을 공백이 아닌 0으로 채워 반환한다. |
S | S9999 | 지정된 위치에 양수/음수 부호를 출력한다. 부호는 문자열의 시작부분에만 사용할 수 있다. |
C | C9999 | 지정된 위치에 ISO 통화 기호를 반환한다. |
, (쉼표) | 9,999 | 지정된 위치에 쉼표(",")를 반환한다. 언어의 설정에 따라 쓰임이 달라지는데, 자릿수 구분 기호로 사용될 경우 여러 개가 허용되며, 소수점 기호로 사용될 경우 한 개만 허용된다. 언어별 숫자의 기본 출력 표 참고 |
. (마침표) | 9.999 | 지정된 위치에 마침표를 출력한다. 언어의 설정에 따라 쓰임이 달라지는데, 자릿수 구분 기호로 사용될 경우 여러 개가 허용되며, 소수점 기호로 사용될 경우 한 개만 허용된다. 언어별 숫자의 기본 출력 표 참고 |
EEEE | 9.99EEEE | 과학적 기수법(scientific notation)을 반환한다. |
언어별 숫자의 기본 출력
언어 | 로캘 이름 | 자릿수 구분 기호 | 소수점 기호 | 숫자 표기 예 |
---|---|---|---|---|
영어 | en_US | ,(쉼표) | .(마침표) | 123,456,789.012 |
독일어 | de_DE | .(마침표) | ,(쉼표) | 123.456.789,012 |
스페인어 | es_ES | .(마침표) | ,(쉼표) | 123.456.789,012 |
프랑스어 | fr_FR | .(마침표) | ,(쉼표) | 123.456.789,012 |
이태리어 | it_IT | .(마침표) | ,(쉼표) | 123.456.789,012 |
일본어 | ja_JP | ,(쉼표) | .(마침표) | 123,456,789.012 |
캄보디아어 | km_KH | .(마침표) | ,(쉼표) | 123.456.789,012 |
한국어 | ko_KR | ,(쉼표) | .(마침표) | 123,456,789.012 |
터키어 | tr_TR | .(마침표) | ,(쉼표) | 123.456.789,012 |
베트남어 | vi_VN | .(마침표) | ,(쉼표) | 123.456.789,012 |
중국어 | zh_CN | ,(쉼표) | .(마침표) | 123,456,789.012 |
루마니아어 | ro_RO | .(마침표) | ,(쉼표) | 123.456.789,012 |
다음은 DB 생성 시 로캘을 "en_US.utf8"로 설정하여 생성한 데이터베이스에서 수행한 예이다.
--selecting a string casted from a number in the specified format
SELECT TO_CHAR(12345,'S999999'), TO_CHAR(12345,'S099999');
to_char(12345, 'S999999') to_char(12345, 'S099999')
============================================
' +12345' '+012345'
SELECT TO_CHAR(1234567,'9,999,999,999');
to_char(1234567, '9,999,999,999')
======================
' 1,234,567'
SELECT TO_CHAR(1234567,'9.999.999.999');
to_char(1234567, '9.999.999.999')
======================
'#############'
SELECT TO_CHAR(123.4567,'99'), TO_CHAR(123.4567,'999.99999'), TO_CHAR(123.4567,'99999.999');
to_char(123.4567, '99') to_char(123.4567, '999.99999') to_char(123.4567, '99999.999')
==================================================================
'##' '123.45670' ' 123.457'
다음은 시스템 파라미터 intl_number_lang의 값을 "de_DE"로 설정하고 수행한 예이다. 독일, 프랑스 등 유럽 국가 대부분의 숫자 출력 형식은 "."가 자릿수 구분 기호이고, ","가 소수점 기호이다.
SET SYSTEM PARAMETERS 'intl_number_lang="de_DE"';
--selecting a string casted from a number in the specified format
SELECT TO_CHAR(12345,'S999999'), TO_CHAR(12345,'S099999');
to_char(12345, 'S999999') to_char(12345, 'S099999')
============================================
' +12345' '+012345'
SELECT TO_CHAR(1234567,'9,999,999,999');
to_char(1234567, '9,999,999,999')
======================
'#############'
SELECT TO_CHAR(1234567,'9.999.999.999');
to_char(1234567, '9.999.999.999')
======================
' 1.234.567'
SELECT TO_CHAR(123.4567,'99'), TO_CHAR(123.4567,'999,99999'), TO_CHAR(123.4567,'99999,999');
to_char(123.4567, '99') to_char(123.4567, '999,99999') to_char(123.4567, '99999,999')
==================================================================
'##' '123,45670' ' 123,457'
SELECT TO_CHAR(123.4567,'99','en_US'), TO_CHAR(123.4567,'999.99999','en_US'), TO_CHAR(123.4567,'99999.999','en_US');
to_char(123.4567, '99', 'en_US') to_char(123.4567, '999.99999', 'en_US') to_char(123.4567, '99999.999', 'en_US')
==========================================================
'##' '123.45670' ' 123.457'
SELECT TO_CHAR(1.234567,'99.999EEEE','en_US'), TO_CHAR(1.234567,'99,999EEEE','de_DE'), to_char(123.4567);
to_char(1.234567, '99.999EEEE', 'en_US') to_char(1.234567, '99,999EEEE', 'de_DE') to_char(123.4567)
==================================================================
'1.235E+00' '1,235E+00' '123,4567'
TO_DATE¶
-
TO_DATE
(string[, format[, date_lang_string_literal]])¶ TO_DATE 함수는 인자로 지정된 날짜 형식을 기준으로 문자열을 해석하여, 이를 DATE 타입의 값으로 변환하여 반환한다. 날짜 형식은 날짜/시간 형식 1을 참고한다.
Parameters: - string -- 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다.
- format -- 날짜 타입으로 변환할 값의 형식을 지정하며, 날짜/시간 형식 1 표를 참고한다. 값이 NULL이면 결과로 NULL이 반환된다.
- date_lang_string_literal -- 입력 값에 적용할 언어를 지정한다.
Return type:
format 인자가 지정되면 지정한 언어에 맞는 형식으로 string 을 해석한다. 이때 언어는 date_lang_string_literal 인자에 의해 정해진다. date_lang_string_literal 인자가 생략되면 intl_date_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_date_lang 값의 설정이 생략되면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 string 이 "12.mai.2012"이고 format 이 "DD.mon.YYYY"인 경우 "2012년 5월 12일"로 해석한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
format 인자가 생략되면 먼저 CUBRID 기본 형식(날짜/시간 타입 문자열 권장 형식 참고)에 따라 string을 해석하고, 실패하는 경우 intl_date_lang에 의해 설정된 언어의 기본 출력 형식(날짜/시간 타입에 대한 언어별 기본 출력 형식 표 참고)에 따라 string을 해석한다. intl_date_lang이 설정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 DATE 타입에 대해 허용하는 문자열은 CUBRID 기본 형식인 "MM/DD/YYYY"과 "de_DE" 기본 형식인 "DD.MM.YYYY"이다.
다음은 DB 생성 시 로캘을 "en_US.utf8"로 설정하여 수행하는 예이다.
--selecting a date type value casted from a string in the specified format
SELECT TO_DATE('12/25/2008');
to_date('12/25/2008')
===============================================
12/25/2008
SELECT TO_DATE('25/12/2008', 'DD/MM/YYYY');
to_date('25/12/2008', 'DD/MM/YYYY')
===============================================
12/25/2008
SELECT TO_DATE('081225', 'YYMMDD');
to_date('081225', 'YYMMDD')
===============================================
12/25/2008
SELECT TO_DATE('2008-12-25', 'YYYY-MM-DD');
to_date('2008-12-25', 'YYYY-MM-DD')
====================================
12/25/2008
다음은 intl_date_lang 의 값이 "de_DE"일 때 TO_DATE를 수행하는 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT TO_DATE('25.12.2012');
to_date('25.12.2012')
========================
12/25/2012
SELECT TO_DATE('12/mai/2012','dd/mon/yyyy', 'de_DE');
to_date('12/mai/2012', 'dd/mon/yyyy', 'de_DE')
=================================================
05/12/2012
TO_DATETIME¶
-
TO_DATETIME
(string[, format[, date_lang_string_literal]])¶ TO_DATETIME 함수는 인자로 지정된 DATETIME 형식을 기준으로 문자열을 해석하여, 이를 DATETIME 타입의 값으로 변환하여 반환한다. DATETIME 형식은
TO_CHAR()
함수의 날짜/시간 형식 1을 참고한다.Parameters: - string -- 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다.
- format -- DATETIME 타입으로 변환할 값의 형식을 지정하며, 날짜/시간 형식 1을 참고한다. 값이 NULL 이면 결과로 NULL 이 반환된다.
- date_lang_string_literal -- 입력 값에 적용할 언어를 지정한다.
Return type: DATETIME
format 인자가 지정되면 지정한 언어에 맞는 형식으로 string 을 해석한다.
예를 들어 언어가 "de_DE"일 때 string이 "12/mai/2012 12:10:00 Nachm."이고 format이 "DD/MON/YYYY HH:MI:SS AM"인 경우 "2012년 5월 12일 오후 12시 10분 0초"로 해석한다. 이때 언어는 date_lang_string_literal 인자에 의해 정해진다. date_lang_string_literal 인자가 생략되면 intl_date_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_date_lang 값의 설정이 생략되면 DB 생성 시 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
format 인자가 생략되면 먼저 CUBRID 기본 형식(날짜/시간 타입 문자열 권장 형식 참고)에 따라 string을 해석하고, 실패하는 경우 intl_date_lang에 의해 설정된 언어의 기본 출력 형식(날짜/시간 타입에 대한 언어별 기본 출력 형식 표 참고)에 따라 string을 해석한다. intl_date_lang이 설정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 DATETIME 타입에 대해 허용하는 문자열은 CUBRID 기본 형식인 "HH:MI:SS.FF AM MM/DD/YYYY"와 "de_DE" 기본 형식인 "HH24:MI:SS.FF DD.MM.YYYY"이다.
Note
CUBRID 9.0 미만 버전에서 사용되었던 CUBRID_DATE_LANG 환경 변수는 더 이상 사용되지 않는다.
다음은 DB 생성 시 로캘을 "en_US"로 설정하여 생성된 데이터베이스에서 수행하는 예이다.
--selecting a datetime type value casted from a string in the specified format
SELECT TO_DATETIME('13:10:30 12/25/2008');
to_datetime('13:10:30 12/25/2008')
=====================================
01:10:30.000 PM 12/25/2008
SELECT TO_DATETIME('08-Dec-25 13:10:30.999', 'YY-Mon-DD HH24:MI:SS.FF');
to_datetime('08-Dec-25 13:10:30.999', 'YY-Mon-DD HH24:MI:SS.FF')
=====================================
01:10:30.999 PM 12/25/2008
SELECT TO_DATETIME('DATE: 12-25-2008 TIME: 13:10:30.999', '"DATE:" MM-DD-YYYY "TIME:" HH24:MI:SS.FF');
to_datetime('DATE: 12-25-2008 TIME: 13:10:30.999', '"DATE:" MM-DD-YYYY "TIME:" HH24:MI:SS.FF')
=====================================
01:10:30.999 PM 12/25/2008
다음은 intl_date_lang 의 값이 "de_DE"일 때 수행한 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT TO_DATETIME('13:10:30.999 25.12.2012');
to_datetime('13:10:30.999 25.12.2012')
=========================================
01:10:30.999 PM 12/25/2012
SELECT TO_DATETIME('12/mai/2012 12:10:00 Nachm.','DD/MON/YYYY HH:MI:SS AM', 'de_DE');
to_datetime('12/mai/2012 12:10:00 Nachm.', 'DD/MON/YYYY HH:MI:SS AM', 'de_DE')
=================================================================================
12:10:00.000 PM 05/12/2012
TO_NUMBER¶
-
TO_NUMBER
(string[, format])¶ TO_NUMBER 함수는 인자로 지정된 숫자 형식을 기준으로 문자열을 해석하여, 이를 NUMERIC 타입으로 변환하여 반환한다.
Parameters: - string -- 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다.
- format -- 숫자로 반환할 값의 형식을 지정하며, 숫자 형식 표를 참고한다. 생략되면 NUMERIC(38,0) 값이 리턴된다.
Return type: NUMERIC
format 인자가 지정되면 지정한 언어에 맞는 형식으로 string 을 해석한다. 이때 언어는 intl_number_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_number_lang 값의 설정이 생략되면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"나 "fr_FR"과 같은 유럽 국가의 언어이면 "."를 숫자의 자릿수 구분 기호로 해석하고 ","를 소수점 기호로 해석한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
format 인자가 생략되면 intl_number_lang에 의해 설정된 언어의 기본 출력 형식을 따라 string 을 해석한다(언어별 숫자의 기본 출력 표 참고). intl_number_lang이 설정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
다음은 시스템 파라미터 intl_number_lang 의 값이 "en_US"일 때 수행한 예이다.
SET SYSTEM PARAMETERS 'intl_number_lang="en_US"';
--selecting a number casted from a string in the specified format
SELECT TO_NUMBER('-1234');
to_number('-1234')
============================================
-1234
SELECT TO_NUMBER('12345','999999');
to_number('12345', '999999')
============================================
12345
SELECT TO_NUMBER('12,345.67','99,999.999');
to_number('12,345.67', '99,999.999')
======================
12345.670
SELECT TO_NUMBER('12345.67','99999.999');
to_number('12345.67', '99999.999')
============================================
12345.670
다음은 시스템 파라미터 intl_number_lang 의 값을 "de_DE"로 설정하여 실행한 예이다. 독일, 프랑스 등 유럽 국가에서는 숫자의 자릿수 구분 기호로 마침표가 사용되며, 소수점 기호로 쉼표가 사용된다.
SET SYSTEM PARAMETERS 'intl_number_lang="de_DE"';
SELECT TO_NUMBER('12.345,67','99.999,999');
to_number('12.345,67', '99.999,999')
======================
12345.670
TO_TIME¶
-
TO_TIME
(string[, format[, date_lang_string_literal]])¶ TO_TIME 함수는 인자로 지정된 시간 형식을 기준으로 문자열을 해석하여, 이를 TIME 타입의 값으로 변환하여 반환한다. 시간 형식은 날짜/시간 형식 1을 참고한다.
Parameters: - string -- 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다.
- format -- TIME 타입으로 변환할 값의 형식을 지정하며, 날짜/시간 형식 1 표를 참고한다. 값이 NULL 이면 결과로 NULL 이 반환된다.
- date_lang_string_literal -- 입력 값에 적용할 언어를 지정한다.
Return type:
format 인자가 지정되면 지정한 언어에 맞는 형식으로 string 을 해석한다. 이때 언어는 date_lang_string_literal 인자에 의해 정해진다. date_lang_string_literal 인자가 생략되면 intl_date_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_date_lang 값의 설정이 생략되면 DB 생성 시 지정한 언어가 적용된다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
예를 들어 언어가 "de_DE"일 때 string 이 "10:23:00 Nachm."이고 format 이 "HH:MI:SS AM"인 경우 "오후 10시 23분 0초"로 해석한다.
format 인자가 생략되면 먼저 CUBRID 기본 형식(날짜/시간 타입 문자열 권장 형식 참고)에 따라 string을 해석하고, 실패하는 경우 intl_date_lang에 의해 설정된 언어의 기본 출력 형식(날짜/시간 타입에 대한 언어별 기본 출력 형식 표 참고)에 따라 string을 해석한다. intl_date_lang이 설정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 TIME 타입에 대해 허용하는 문자열은 CUBRID 기본 형식인 "HH:MI:SS AM"과 "de_DE" 기본 형식인 "HH24:MI:SS"이다.
Note
CUBRID 9.0 미만 버전에서 사용되었던 CUBRID_DATE_LANG 환경 변수는 더 이상 사용되지 않는다.
다음은 시스템 파라미터 intl_date_lang 의 값이 "en_US"일 때 수행한 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="en_US"';
--selecting a time type value casted from a string in the specified format
SELECT TO_TIME ('13:10:30');
to_time('13:10:30')
=============================================
01:10:30 PM
SELECT TO_TIME('HOUR: 13 MINUTE: 10 SECOND: 30', '"HOUR:" HH24 "MINUTE:" MI "SECOND:" SS');
to_time('HOUR: 13 MINUTE: 10 SECOND: 30', '"HOUR:" HH24 "MINUTE:" MI "SECOND:" SS')
====================================================================================
01:10:30 PM
SELECT TO_TIME ('13:10:30', 'HH24:MI:SS');
to_time('13:10:30', 'HH24:MI:SS')
==================================
01:10:30 PM
SELECT TO_TIME ('13:10:30', 'HH12:MI:SS');
ERROR: Conversion error in date format.
다음은 intl_date_lang 의 값이 "de_DE"일 때 수행하는 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT TO_TIME('13:10:30');
to_time('13:10:30')
======================
01:10:30 PM
SELECT TO_TIME('10:23:00 Nachm.', 'HH:MI:SS AM');
to_time('10:23:00 Nachm.', 'HH:MI:SS AM')
==============================================
10:23:00 PM
TO_TIMESTAMP¶
-
TO_TIMESTAMP
(string[, format[, date_lang_string_literal]])¶ TO_TIMESTAMP 함수는 인자로 지정된 타임스탬프 형식을 기준으로 문자열을 해석하여, 이를 TIMESTAMP 타입의 값으로 변환하여 반환한다. 타임스탬프 형식은 날짜/시간 형식 1을 참고한다.
Parameters: - string -- 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다.
- format -- TIMESTAMP 타입으로 변환할 값의 형식을 지정하며, 날짜/시간 형식 1 표를 참고한다. 값이 NULL 이면 결과로 NULL 이 반환된다.
- date_lang_string_literal -- 입력 값에 적용할 언어를 지정한다.
Return type:
format 인자가 지정되면 지정한 언어에 맞는 형식으로 string 을 해석한다. 이때 언어는 date_lang_string_literal 인자에 의해 정해진다. date_lang_string_literal 인자가 생략되면 intl_date_lang 시스템 파라미터에 지정한 언어가 적용되며, intl_date_lang 값의 설정이 생략되면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 string 이 "12/mai/2012 12:10:00 Nachm."이고 format 이 "DD/MON/YYYY HH:MI:SS AM"인 경우 "2012년 5월 12일 오후 12시 10분 0초"로 해석한다. 주어진 문자열과 대응하지 않는 format 인자가 지정되면 에러를 반환한다.
format 인자가 생략되면 먼저 CUBRID 기본 형식(날짜/시간 타입 문자열 권장 형식 참고)에 따라 string을 해석하고, 실패하는 경우 intl_date_lang에 의해 설정된 언어의 기본 출력 형식(날짜/시간 타입에 대한 언어별 기본 출력 형식 표 참고)에 따라 string을 해석한다. intl_date_lang이 설정되지 않으면 DB 생성 시 지정한 언어가 적용된다.
예를 들어 언어가 "de_DE"일 때 TIMESTAMP 타입에 대해 허용하는 문자열은 CUBRID 기본 형식인 "HH:MI:SS AM MM/DD/YYYY"와 "de_DE" 기본 형식인 "HH24:MI:SS DD.MM.YYYY"이다.
다음은 시스템 파라미터 intl_date_lang 의 값이 "en_US"일 때 수행한 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="en_US"';
--selecting a timestamp type value casted from a string in the specified format
SELECT TO_TIMESTAMP('13:10:30 12/25/2008');
to_timestamp('13:10:30 12/25/2008')
======================================
01:10:30 PM 12/25/2008
SELECT TO_TIMESTAMP('08-Dec-25 13:10:30', 'YY-Mon-DD HH24:MI:SS');
to_timestamp('08-Dec-25 13:10:30', 'YY-Mon-DD HH24:MI:SS')
======================================
01:10:30 PM 12/25/2008
SELECT TO_TIMESTAMP('YEAR: 2008 DATE: 12-25 TIME: 13:10:30', '"YEAR:" YYYY "DATE:" MM-DD "TIME:" HH24:MI:SS');
to_timestamp('YEAR: 2008 DATE: 12-25 TIME: 13:10:30', '"YEAR:" YYYY "DATE:" MM-DD "TIME:" HH24:MI:SS')
======================================
01:10:30 PM 12/25/2008
다음은 intl_date_lang 의 값이 "de_DE"일 때 수행한 예이다.
SET SYSTEM PARAMETERS 'intl_date_lang="de_DE"';
SELECT TO_TIMESTAMP('13:10:30 25.12.2008');
to_timestamp('13:10:30 25.12.2008')
======================================
01:10:30 PM 12/25/2008
SELECT TO_TIMESTAMP('10:23:00 Nachm.', 'HH12:MI:SS AM');
to_timestamp('10:23:00 Nachm.', 'HH12:MI:SS AM')
===================================================
10:23:00 PM 08/01/2012